﻿import random

from Libfiles import Error_and_Warning


class Newlei:
    def __init__(self, horizontal: int, vertical: int):
        """此函数用于初始化雷区并生成horizontal×vertical的雷区
        horizontal：int类型，代表横轴
        vertical：int类型，代表竖轴
        """
        # 初始化变量
        self.alpha = list()  # 雷位置列表
        self.horizontal = horizontal + 1  # 雷区大小
        self.vertical = vertical

        temp = list()

        for _ in range(self.horizontal + 1):
            # 将竖轴0全部设为没有雷
            temp.append(False)
        self.alpha.append(temp)

        for _ in range(self.vertical + 1):
            # 生成区域
            self.alpha.append(temp)

        for i in range(1, self.horizontal):
            # 生成雷，True代表该格有雷，False代表没有雷
            for j in range(1, self.vertical):
                self.alpha[i][j] = bool(random.randint(0, 1))
        for i in range(1, self.vertical):
            # 将横轴0全部设为没有雷
            self.alpha[0][i] = False

    def getlei(self, horizontal: int, vertical: int):
        """用于获取雷，返回以horizontal为横轴，vertical为竖轴的点的状态
        horizontal：int类型，代表横轴
        vertical：int类型，代表竖轴"""
        try:
            return self.alpha[horizontal][vertical]
        except IndexError:
            raise Error_and_Warning.User_Induced_Error(
                "需要的是1～" + str(self.many - 1) + "之间的数，但是用户给予了我们" + str(horizontal) + "和" + str(
                    vertical))

    def getnum(self, horizontal: int, vertical: int):
        """用于获取周围雷的数量，返回以horizontal为横轴，vertical为竖轴的中心点的周围的雷的数量
        horizontal：int类型，代表横轴
        vertical：int类型，代表竖轴"""
        try:
            return self.alpha[horizontal][vertical + 1] + self.alpha[horizontal + 1][vertical] + \
                   self.alpha[horizontal + 1][vertical + 1] + \
                   self.alpha[horizontal - 1][vertical] + self.alpha[horizontal][vertical - 1] + \
                   self.alpha[horizontal - 1][vertical - 1] + \
                   self.alpha[horizontal + 1][vertical - 1] + self.alpha[horizontal - 1][vertical + 1]
        except IndexError:
            raise Error_and_Warning.User_Induced_Error(
                "需要的是1～" + str(self.many - 1) + "之间的数，但是用户给予了我们" + str(horizontal) + "和" + str(
                    vertical))
